package main

import (
	"fmt"
	"gee"
	"log"
	"net/http"
)

/**
go中引用自己写的模块，如果子package（某个功能模块或者说库）存在gomod文件，其他需要引用该模块时
除了要用go mod init xxx和go mod tidy 之外还需手动对其go.mod进行编辑
- 添加require信息时添加要引用的模块名和其版本号 ，版本号可以自定义
- 添加replace信息是为了指明要引用的模块相对于当前模块go.mod的路径，以便能找到要引用的模块
*/

func main() {
	//在此之前，只能通过HandleFunc方法来注册路由和对应的处理函数，
	//这种方式只能针对具体的路由写处理逻辑，比如/hello
	/*http.HandleFunc("/", indexHandler)
	http.HandleFunc("/hello", helloHandler)*/
	//在main方法中，给ListenAndServe第二个方法传入创建的engine实例，
	//那么所有的HTTP请求，就都交给了该实例处理了。
	r := gee.New()
	r.GET("/", indexHandler)
	r.GET("/hello", helloHandler)
	r.Run(":9999")
}

func indexHandler(w http.ResponseWriter, req *http.Request) {
	w.WriteHeader(http.StatusOK)
	w.Write([]byte("welcome gee web index!"))
}

func helloHandler(w http.ResponseWriter, req *http.Request) {
	//http.Request.ULR.Query() 返回请求的querystring
	//http.Request.Form 返回请求的form
	for k, v := range req.URL.Query() {
		log.Printf("request key: %s, val: %s\n", k, v)
		// 检查 v 中的每个值是否等于 "法轮功"
		for _, value := range v {
			if value == "法轮功" {
				panic(fmt.Sprintf("非法参数: %s", value))
			}
		}
	}
	w.WriteHeader(http.StatusOK)
	w.Write([]byte("hello gee"))
}
